package br.ufpe.cin.if680.lightmirror.core;

public class Camera {
	protected Vetor u;
	protected Matriz mudancaBase;
	protected Parametros parametros;
	
	public Camera(Parametros param){
		param.v = param.v.ortogonal(param.n); 
		u = param.v.produtoVetorial(param.n); // u, v e n => ortogonais dois a dois
		this.parametros = param;
		u.normalizar();
		param.v.normalizar();
		param.n.normalizar();
		this.setU(u);
		this.setV(param.v);
		this.setN(param.n);	
		this.mudancaBase = new Matriz(u,param.v,param.n); // para mudar p vista da camera
	}
	
	//TODO Mudar método para chamada não destrutiva
	/**
	 * Converte o ponto p para as coordenadas da câmera.
	 */
	public void converterParaCordenadasCamera(Ponto p) {
		//Vetor w = p.subtracao(this.parametros.c);
		Vetor produto = this.mudancaBase.multiplicar(p.subtracao(this.parametros.c));
		p.setX(produto.getX());
		p.setY(produto.getY());
		p.setZ(produto.getZ());
	}

	public Ponto getC() {
		return parametros.c;
	}

	public Vetor getN() {
		return parametros.n;
	}

	public Vetor getU() {
		return u;
	}

	public Vetor getV() {
		return parametros.v;
	}

	public void setC(Ponto foco) {
		this.parametros.c = foco;
	}

	public void setN(Vetor n) {
		this.parametros.n = n;
	}

	public void setU(Vetor u) {
		this.u = u;
	}

	public void setV(Vetor v) {
		this.parametros.v = v;
	}
}
